/*
 * 
 *  Este arquivo é parte do software TODO Calculadora. TODO Calculadora é um software livre;
 *  você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU
 *  como publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença,
 *  ou (na sua opnião) qualquer versão.
 *  
 *	Este programa é distribuido na esperança que possa ser útil, mas SEM NENHUMA GARANTIA;
 *  sem uma garantia implícita de ADEQUAÇÂO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR.
 *  Veja a Licença Pública Geral GNU para maiores detalhes. Você deve ter recebido uma cópia
 *  da Licença Pública Geral GNU junto com este programa, se não, escreva para a Fundação do
 *	Software Livre(FSF)
 *
 *	Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

package operacoes.basica.abstrata;

/**
 * 
 * <p>
 * Classe abstrata que representa operações binárias. Estende funcionalidades da
 * classe <b>{@link AbstractOperacao}</b>.
 * </p>
 * 
 * @author Marcos Oliveira Soares
 */
public abstract class AbstractOperacaoBinaria extends AbstractOperacao {

	/** Elemento dois (2), segundo operando da operação */
	Number elementoDois;

	public AbstractOperacaoBinaria() {
		super();
	}

	public AbstractOperacaoBinaria(Number numeroUm) {
		super(numeroUm);
	}

	public AbstractOperacaoBinaria(Number numeroUm, Number numeroDois) {
		super(numeroUm);
		this.elementoDois = numeroDois;
	}

	public Number getElementoDois() {
		return elementoDois;
	}

	public void setElementoDois(Number elementoDois) {
		this.elementoDois = elementoDois;
	}

	/**
	 * <p>
	 * Método abstrato utilizado pelas operações para realizar a operação
	 * binária correspondente.
	 * </p>
	 */
	public abstract void executaOperacao(Number elementoUm, Number elementoDois);

	@Override
	public boolean equals(Object obj) {
		if (super.equals(obj)) {
			if (((AbstractOperacaoBinaria) obj) instanceof AbstractOperacaoBinaria) {
				AbstractOperacaoBinaria objeto = (AbstractOperacaoBinaria) obj;
				return ((objeto.elementoDois == this.elementoDois));
			} else {
				return false;
			}
		}
		return false;
	}

}